/* eslint-disable no-inner-declarations */
/* eslint-disable no-unused-vars */

/*
------分数注意事项-----
本次测试满分为100(最多100分), 有4道加分题; 答案不够完整或者有错误当题0分处理;

------分数处理-----
(0-60]: 不及格, 处理: 提供第二份不同试卷晚自习的时候重新考试, 并在第二天晚自习时间单独进行测试题提问(大部分都回答不上则采用手抄试卷方案);

(60-75]: 良良, 处理: 晚自习时间单独进行测试题提问(大部分都回答不上则采用手抄试卷方案);

(75-90]: 良好, 处理: 放你一马, 好好复习;

(90-100]: 优秀, 处理: 好好好, 继续保持;
*/

// 1.JS延迟加载的方式有哪些？（5）
//设置延时计时器
// 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；（5）

// 4.如何进行数据类型的判断？（5）
//typeof(元素) 返回元素类型
//元素 instanceof 构造函数（如String,Number...）,返回布尔型
//Object.prototype.toString.call(元素) ,返回[object 构造函数]
// 5.null 和 undefined 的区别？什么时候会得到 undefined？（5）
//null是空值，undefined 表示没有被赋值。
//变量在输出前没有被赋值；函数没设置返回值时，输出它的返回值
// 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？（5）
//变量的未定义时它的值是null，所以null == undefined 返回 true
// null是null类型，undefined是undefined 类型，两者类型不同，所以null === undefined 返回 false
// 7.使用 continue 或 break 终止循环时，两种方式的区别是？（5）
// continue：结束本次循环
// break：跳出当前循环
// 8.如何判断字符串内是否包含指定字符？（5）
function f8(arr, a) {
    for (let i = 0; i < arr.length; i++) {
        if (a === arr[i]) return true;
    }
    return false;
}
//f8('123','2')
// 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；（5）
//会：splice,push,pop,shift,unshift
//不会：forEach,map,slice,includes,indexOf,lastIndexOf,join,some,every,reduce,reverse,sort,concat
// 10. 请写出下面语句的输出结果：（5）
// let bar = true, number = 0;
// console.log(bar + 0);//1
// console.log(bar + "xyz");//'truexyz'
// console.log(bar + true);//2
// console.log(+true);//1
// console.log(!'bluej');//flase
// console.log(number++);//0
// console.log(++number);//2
// console.log(number);//2

// 11. 根据用户输入时间实现倒计时(还剩x天x时x分x秒)，输入时间格式错误时要有错误提示（5）
// window.prompt("请输入目标时间");
// let t = new Date(window.prompt("请输入目标时间")).getTime();
// let t
// while (t===undefined) {
//     t =prompt("请输入目标时间")
//     //if(f(t)){}//用函数判断格式正确与否
//   }
function f11(t) {
    let d, h, m, s;
    t = (new Date(t).getTime() - Date.now()) / 1000; //秒
    console.log(t);
    d = Math.floor(t / 60 / 60 / 24);
    h = Math.floor((t / 60 / 60) % 24);
    m = ((t / 60) % 60).toFixed(0);
    s = parseInt(t % 60);
    console.clear();
    return '还剩' + d + '天' + h + '时' + m + '分' + s + '秒';
}
// let set=setInterval(function(){
//     console.log(f11(t));
// },1000)
// 12.输出从小到大排序好的五个不重复的随机"素数",范围[10-58)；（10）
// 质数也叫素数是指在大于1的自然数中，除了1和它本身以外不再有其他因数的自然数，不能被任何整数整除的数。
function f12() {
    for (let i = 0; i < 5; i++) {
        let n = Math.floor(10 + Math.random() * 48);
        function f(n) {
            for (let i = 2; i < n; i++) {
                if (parseInt(n % i) == n % i) return false;
            }
            return true;
        }
        let a = [];
        if (f(n)) a.push(n);
        a = a.sort(function (a, b) {
            return a - b;
        });
        a.forEach(function (v) {
            console.log(v);
        });
    }
}

// 13.把下面数组成员排序打乱；（5）
function f13() {
    let arr13 = [10, 20, 30, 40, 50, 60];
    let newArr2 = []; // 打乱之后的数组
    for (let i = 0; i < arr13.length; i++) {
        let n = Math.floor(Math.random() * 6);
        if (!newArr2.includes(arr13[n])) newArr2.push(arr13[n]);
        else {
            i--;
        }
    }
    console.log(newArr2);
}
//f13()
// 14. 将多个数组进行去重合并；（10）
function f14() {
    let arr140 = [1, 2, 3],
        arr141 = [2, 3, 4, 5];
    arr140 = arr140.concat(arr141);
    arr140 = arr140.filter(function (v, i) {
        return i == arr140.indexOf(v);
    });
    console.log(arr140);
}
//f14()
// 15. 找出数组 arr=[1, 2, 3, "a", 4, "a", 2, 4, "a"] 中重复出现过的元素,并用数组将重复元素装起来输出,并且统计每个元素出现的次数（10）
function f15() {
    let arr15 = [1, 2, 3, 'a', 4, 'a', 2, 4, 'a'];
    let obj = {},
        a = [];
    a = arr15.filter(function (v, i) {
        return i != arr15.indexOf(v);
    });
    a = a.filter(function (v, i) {
        return i == a.indexOf(v);
    });
    console.log('重复元素为', a);
    // arr15.forEach(function(v){
    //     if()
    // })
}
//f15()
// 16. 找出数组中年龄小于18岁的女生的信息重新组成新的数组,并且将她们count变为现有的平方（10）
let arr16 = [
    {
        name: '111',
        sex: 'boy',
        age: 18,
        count: 20,
    },
    {
        name: '222',
        sex: 'girl',
        age: 17,
        count: 30,
    },
    {
        name: '333',
        sex: 'boy',
        age: 16,
        count: 40,
    },
    {
        name: '444',
        sex: 'girl',
        age: 15,
        count: 50,
    },
    {
        name: '555',
        sex: 'boy',
        age: 20,
        count: 60,
    },
    {
        name: '666',
        sex: 'girl',
        age: 13,
        count: 70,
    },
    {
        name: '777',
        sex: 'boy',
        age: 14,
        count: 80,
    },
];
function f16(arr16) {
    arr16 = arr16.map(function (v) {
        if (v.age < 18) v.count = v.count * v.count;
    });
    console.log(arr16);
}
//f16(arr16)
// 17. 实现一个深克隆函数 (加分题 5)

// 18. 实现一个数组的reduce方法 (加分题 5)
// function f18(cb,a){
//     if(a===undefined){}
// }
// 19. 写出强制转换的方法有哪些 (加分题 5)

// 20. 如何判断一个对象是否为空对象的3种方法 (加分题 5)
